// 微信聊天机器人工具
const { WechatyBuilder, ScanStatus } = require('wechaty');
// 定时任务
const cron = require('node-cron');
// 引入其他工具
const { handleSendMessage } = require('./send-message');
 
/**
 * 定义事件函数 
 * - onLogout
 * - onLogin 
 * - onScan 二维码生成
 * - onError
 * - onMessage
 * - onFriendship
 * - onInvitation
 */
// 登录事件
function onLogin(user) {
  console.log(`>>> 登录: 用户 ${user} 已登陆`);
};
// 登出事件
function onLogout(user) {
  console.info(`>>> 登出: 用户 ${user.name()} 已登出`);
};
// 扫码登录事件
function onScan(qrcode, status) {
  if(status === ScanStatus.Waiting || status === ScanStatus.Timeout) {
    require('qrcode-terminal').generate(qrcode, { small: true }); // 在终端渲染二维码
    // 官方给的网页登录微信二维码的方式 - 不容易连接
    // const qrcodeImgUrl = [
    //   'https://wechaty.js.org/qrcode/',
    //   encodeURIComponent(qrcode),
    // ].join('');
    // 推荐
    const qrcodeImgUrl = [
      'https://api.qrserver.com/v1/create-qr-code/?data=',
      encodeURIComponent(qrcode)
    ].join('');

    console.info('>>> 扫码操作: %s(%s) - %s', ScanStatus[status], status, qrcodeImgUrl);
  } else {
    console.info('>>> 扫码操作: %s(%s)', ScanStatus[status], status);
  }
};
// 接收消息事件
async function onMessage(msg) {
  let topic = ""; // 群聊名称
  let room = msg.room(); // 获取这条消息是不是来自群聊
  if(room) { topic = await room.topic(); }; // 群聊名称
	const contact = msg.talker() // 获取这条消息发送人的信息
  const contactName = contact.name() // 发送人的昵称
  const text = msg.text() // 消息内容

  if (msg.self()) { //不处理自己消息
    return;
  }

  if(room && topic === '幸福的一家') {
    console.log(`>>> 接收消息: ${contactName}; ${contact}; ${text}`);
  }
};
// 接收好友请求事件
function onFriendship(friendship) {
  console.log('>>> 好友请求: ', friendship)
};
// 接收入群邀请事件
function onInvitation(invitation) {
  console.log('>>> 入群邀请: ', invitation)
};
// 出错事件
function onError(err) {
  console.error('>>> 出错信息:', err);
};

// 构建微信机器人实例
const bot = WechatyBuilder.build({
  name: "xinz-bot"
});

// 注册事件函数
bot
  .on("scan", onScan)
  .on("login", onLogin)
  .on("message", onMessage)
  .on("logout", onLogout)
  .on("friendship", onFriendship)
  .on("room-invite", onInvitation)
  .on("error", onError)

// 定时器任务 
cron.schedule("0 22 * * *", async () => {
  const room = await bot.Room.find({topic: '幸福的一家'});
  if(room) {
    await room.say('晚安爸爸妈妈～～');
  }
});

cron.schedule("8 9 * * *", async () => {
  const room = await bot.Room.find({topic: '幸福的一家'});
  if(room) {
    let str = await handleSendMessage();
    await room.say(str);
  }
});

cron.schedule("40 11 * * *", async () => {
  const room = await bot.Room.find({topic: '幸福的一家'});
  if(room) {
    await room.say('吃饭饭去了');
  }
});

cron.schedule("50 17 * * *", async () => {
  const room = await bot.Room.find({topic: '幸福的一家'});
  if(room) {
    await room.say('准备下班，嘿嘿～～');
  }
});

// 导出微信机器人实例
module.exports = { bot };